[Report]AWS 서비스를 통하여 다양한 컨텐츠를 빠르게 전송하기 #AWSSummitOnlineKorea
시작하며
안녕하세요! 4월1일부터 Classmethod 주식회사에 신입으로 입사하게 된 임홍기라고 합니다.
한국어로 쓰는 블로그는 처음입니다만, 이번 AWS Summit Online Korea를 시작으로 앞으로 종종 써보고자 합니다!
2020.05.13(수) AWS Summit Online Korea가 개최되었습니다.
아마존닷컴 CTO인 Dr. Werner Vogels의 기조연설을 시작으로 AWS 클라우드 활용의 기초에 대해 소개하는 AWSome Day 및 다양한 트랙에서 AWS 기술을 활용한 모범 사례 등을 들을 수 있습니다.
금일 스트리밍했던 강연은 온디멘드 형식으로 올해 8월까지 공개하였으므로 언제든지 필요한 세션을 볼 수 있습니다.
세션은 강연 일정표를 통해 자세한 내용을 확인할 수 있습니다.
접수 못 하신 분들은 https://go.aws/3eXrHVN 에서 등록 후 접근할 수 있다고 합니다.
본 포스트에서는 기술 트랙 1번의 Compute, Storage, Networking/CDN 파트인
[AWS 서비스를 통하여 다양한 컨텐츠를 빠르게 전송하기(입문)] 세션을 포스팅 하고자합니다.
포스트에서 사용된 해당 세션의 PPT 자료는 PDF 자료를 읽어주세요!
잘 부탁드리겠습니다!
Speaker
- 주윤홍님 - AWS 솔루션즈 아키텍트
AWS의 Edge서비스를 이용하여 다양한 컨텐츠를 빠르게 전송하는 방법
Edge 서비스란?
AWS 상에 구축되어 운영하고있는 비지니스 앱 또는 웹 사이트들을 엔드유저에게 안전하고 빠르게 전송하는 기능을 제공하는 서비스
즉, 사용자 관점에서 서비스를 얼마나 빠르고 안전하게 이용할 수 있을까? 를 고려한 서비스입니다.
왜 빠른 전송이 중요한가
여러 서비스 및 소프트웨어, 메신저 등의 컨텐츠 들은 빠르게 전송되어야 하며, 그렇지 않을 경우 비지니스에 악영향을 끼치게 됩니다.
- 느린 데이터 전송이 끼치는 영향
- SEO : 웹 사이트의 경우 컨텐츠의 전송이 느리면 검색 노출에 영향을 받음
- E-Commerce : 페이지 로딩이 길어지면 구매자 이탈률이 높아짐
- Live Stream : 버퍼링이 생기면 사용자 경험에 악영향을 끼침
컨텐츠 전송이 느린 이유
단순하게 애플리케이션에 접근해서 컨텐츠를 받는 것이 아닌, 실제로는 여러 네트워크를 거쳐 AWS의 리전에 도착하고
요청과 응답의 네트워크는 동일하지 않을 수 있기 때문입니다.
AWS 엣지 서비스는 어떻게 컨텐츠를 전송할까?
가까운 엣지 로케이션에 연결되어 AWS 글로벌 네트워크를 통해서 AWS 리전까지 갔다 오기 때문에 인터넷의 여러 네트워크 홉을 거치는 일이 없기 때문에 빠르게 컨텐츠를 전송할 수 있습니다.
일반적으로 우리가 애플리케이션에 접근할 때 AWS리전의 인터넷에 접근하게 되지만
AWS 글로벌 네트워크는 100Gbps의 광케이블을 다중으로 연결했기 때문에 성능과 가용성이 높습니다.
(AWS 글로벌 네트워크)
엣지 서비스를 이용하게 되면 가까운 엣지 로케이션에 먼저 연결하고, 위의 AWS 네트워크를 이용하게 됩니다.
엣지 로케이션의 주요 특징
- 현재 216개의 엣지 로케이션이 존재
- 11 리전 엣지 캐시
- 42개국 84개 도시에 위치
- 연간 50% 이상 확장되고 있음
- 사용자들과 더 가까운 위치에서 빠르게 서비스를 제공하기 위해 여러 ISP와 네트워크 연결을 맺고 있음
엣지 로케이션에서 동작하는 서비스들
(대표적인 서비스)
여러 서비스가 있지만 이번 강연에서는 Amazon CloudFront와 AWS Global Accelerator에 대해 소개합니다.
공통점 : AWS 전용 네트워크를 이용하여, 컨텐츠를 빠르게 주고받도록 해줍니다.
Amazon CloudFront란?
Cloud native Content Delivery Network(CDN)
- 작동 방식
- 사용자에게 최적의 엣지 로케이션을 찾는다. (DNS를 통해 연결)
- 자신이 사용하는 ISP의 DNS에 질의하고, 이 질의들은 연결되어 CloudFront NameServer에 전달됨
- CloudFront NameServer에서는 DNS쿼리를 보고, 해당 네트워크에 가장 성능이 좋은 POP을 찾아 접속하여
- 최적한 엣지 로케이션 IP를 사용자에게 응답함
- 사용자는 응답받은 IP 주소를 통해 실제 HTTP 통신을 하게 됨
- HTTP에서 지원하는 캐시 기능을 이용하여 정적인 컨텐츠를 바로 응답
- API나 개인정보 등의 동적인 컨텐츠의 경우 AWS 글로벌 네트워크를 통해 빠르게 전송
- 사용자에게 최적의 엣지 로케이션을 찾는다. (DNS를 통해 연결)
-
이점
다른 AWS 서비스와 쉽게 연동할 수 있으며 AWS 리전 Data Transfer Out의 비용이 면제되기 때문에 비용 절감 효과를 가질 수 있습니다.
캐시를 이용한 응답
- 3계층(layer) 구조
- L1 : 빈번하게 요청되는 컨텐츠 처리. hot 컨텐츠 캐시 layer에서 응답. 찾아지지 않는 경우에는
- L2 : 대형캐시 계층에서 찾고, 여기서도 찾아지지 않는 경우
- L3 : L3 계층은 원본까지 연결을 유지(TCP Connection)하고 있기 때문에 빠르게 응답
동적 컨텐츠의 경우에는?
- L1에서 캐시 계층을 건너뛰고 L3으로 직접 연결합니다.
- L3에서 Origin으로 접속. (사용자가 한번 연결하거나, 여러 번 연결해도 오버헤드를 피하고 최적화된 통신을 할 수 있습니다.)
CloudFront를 사용한 실제 사례(Tinder)
사용하기 전(US Region)
글로벌 사용자가 늘어남에 따라 네트워크 지연이 발생
모든 Request를 CloudFront로 전달하게 구성한 후
TLS handshake 지연이 대폭 개선 됨으로써, 사용자 경험이 높아지는 결과로 이어졌습니다. (API 성능이 최대 45% 개선됨)
CloudFront 구축 예시
위와 같이 하나의 배포구성을 하면 동적/정적인 리소스를 모두 전송할 수 있습니다.
HTTP를 지원하는 AWS의 서비스나 온프레미스의 서버들도 CloudFront의 원본이 될 수 있습니다.
CloudFront의 설정
- 동적 컨텐츠의 경우 : Cache Based on Selected Request Headers에 All을 하는 것으로 해당 URL에서는 항상 캐시를 하지 않고, Origin에 가서 가속된 응답을 가지고 오게 할 수 있습니다.
- 정적 컨텐츠의 경우 : 같은 설정에서 None으로 설정하게 되면, 해당 컨텐츠는 캐시가 가능해집니다.
AWS Global Accelerator란?
고정된 IP와 트래픽 제어
- 고정된 두 개의 IP를 사용하여 엣지 로케이션에 접속할 수 있다.
- 다중 리전 구성에서 최적의 리전으로 트래픽을 자동 연결해준다. (글로벌 로드 벨런스 기능이라고도 불림)
- AWS 글로벌 네트워크를 통해 컨텐츠를 빠르게 전송할 수 있다.
CloudFront와는 다른 점
- 상위 프로토콜과 무관하게 TCP/UDP 즉, L3 L4의 프로토콜에서 가속 (HTTP이외의 프로토콜에서도 가속 가능)
- 캐시 기능이 없다
고정된 IP가 가까운 로케이션에 연결되는 과정(Anycast를 이용)
- 엣지 로케이션은 물리적으로 여러 곳으로 나누어져 있고, 접속할 때 동일한 IP로 접속하게 됩니다.
- 사용자는 자신이 접속해 있는 네트워크를 통해 가까운 엣지 로케이션에 자동으로 접근하고
- 해당 사용자에게 가까운 AWS 리전으로 트래픽을 연결해 줍니다.
트래픽을 상세하게 제어하고 싶을 때(다이얼 기능)
- 만약에 특정 리전이 트래픽을 받을 수 없는 상황이나, 유지보수를 해야 할 때 다이얼을 통해 트래픽을 조절할 수 있습니다.
- 다이얼을 0%로 설정하면, 해당 리전에 가까운 사용자라도 트래픽을 받지 않게 할 수 있습니다. 예) 미국에 있는 사용자라고 해도 다이얼 기능으로 서울 리전에 연결되게 할 수 있습니다.
다른 리전으로 가게 하면 속도가 저하되지 않을까?
- 글로벌 네트워크를 통해 접속하기 때문에 트래픽 가속효과를 받을 수 있습니다.
- 또한 문제 발생 시 Health Check 기능을 통해 장애가 발생해도 자동으로 트래픽을 제어해주기 때문에 사용자에게 끼치는 영향을 최소화 할 수 있습니다.
Global Accelerator의 설정
- Listener 설정 - 포트와 프로토콜을 설정
- Endpoint Group 설정 - 어떤 리전을 통해서 Listener의 트래픽을 받을지 설정(다중 리전시 추가 가능)
- Endpoint 등록 - 실제 리전 내에 있는 리소스들(엔드포인트)을 등록(Health Check도 등록 할 수 있음)
CloudFront와 Global Accelerator의 비교
CloudFront | Global Accelerator | |
---|---|---|
특징 | HTTP, HTTPS 컨텐츠의 캐시 및 가속 전송에 최적화 | TCP/UDP상의 모든 트래픽에 대해 가속 전송 |
접근 방식 | DNS를 통한 실시간 최적의 로케이션 제공 | 고정된 2개의 Anycast IP를 통해 자동으로 접근 |
다중 리전 지원 | 다중 리전 및 온프레미스 원본 지원 | 다중리전 지원 |
원본의 헬스체크 | Route53과 연동하여 가능 | 가능 |
과금 | HTTP request, Byte 과금(오리진 data transfer out 비용의 면제) | Byte 과금 (오리진 data transfer out 비용에 추가) |
속도를 비교하면 어떨까?
- 속도 자체는 크게 차이가 없습니다. 하지만 오리진보다는 빠르고 안정적입니다.
- CloudFront의 캐시기능을 사용하면 다른 기능보다 월등한 속도를 자랑할 수 있습니다.(캐시에서 꺼내서 응답하기 때문에)
- 역으로 생각하자면, 서비스를 할 때, 캐시가 가능한 컨텐츠를 최대한 찾아서 캐싱을 하는 전략이 중요!!
정리
- 컨텐츠 전송의 지연은 비지니스와 사용자 경험에 부정적인 영향을 끼친다.
- HTTP 기반의 애플리케이션은 Amazon CloudFront를 통해 성능향상이 가능
- Non-HTTP 애플리케이션과 같은 경우에는 Global Accelerator로 성능을 향상시킬 수 있다.